import requests
import time
import random
import string


class TestData:
    """
    测试数据类，随机生成指定长度组合的测试数据
    """

    def test_str(self, num=10) -> str:
        """
        生成字符穿
        :return:
        """
        return ''.join(random.sample(string.ascii_letters, num))

    def test_int(self, mi=1, ma=100) -> int:
        """
        生成一组int数据
        :return:
        """
        return random.randint(mi, ma)

    def test_float(self, mi=1, ma=10, num=4) -> float:
        """
        生成一组小数
        :return:
        """
        float_num = str(random.uniform(mi, ma)).split('.')
        return float('.'.join([float_num[0], float_num[1][:num]]))

    def test_zh(self, num=5):
        """
        生成一串中文
        :return:
        """
        zh_str = ''
        for _ in range(num):
            head = random.randint(0xb0, 0xf7)
            body = random.randint(0xa1, 0xfe)
            val = f'{head:x} {body:x}'
            str = bytes.fromhex(val).decode('gb2312')
            zh_str += str
        return zh_str

    def test_time(self):
        """
        生成一串时间
        :return:
        """
        pass

    def test_special_char(self, num=5):
        """
        生成一串特殊字符
        :return:
        """
        special = '!@#$%^&*()<>?":}{][+_'
        return ''.join()

    def test_random_data(self):
        """
        随机生成一串数据
        :return:
        """
        pass

    def json_temp(self, template: dict,
                  all_type=False,
                  standard=True,
                  change_field=None,
                  fixed_field=None) -> list:
        """
        :param template: 传入的json参数模板
        :param all_type: 全类型覆盖--生成所有数据类型( [字符],[中文], [int], [float], [特殊], [长度], [空] )
        :param standard: 标准类型覆盖--尽可能少的覆盖( [字符+特殊+中文+长],[int], [float] )
        :param change_field: 需要覆盖的字段--指定字段生成
        :param fixed_field: 不需要覆盖的固定字段--自定字段不生成
        :return: 返回根据模板生成的不同组合的参数列表--原模板的key不发生变化
        """
        test_data_list = []
        # 全覆盖逻辑
        if all_type:
            for i in [self.test_str(), self.test_zh(), self.test_int(), self.test_float()]:
                pass
        # 标准覆盖逻辑
        elif standard:
            pass
        return test_data_list


if __name__ == '__main__':
    s = TestData().test_str()
    i = TestData().test_int()
    f = TestData().test_float()
    zh = TestData().test_zh()
    print(s)
    print(i)
    print(f)
    print(zh)
